iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
1

form POST

上一篇文章介紹少使用者發出請求的手段之一 query string,但是query string有長度限制,而且容易被攔截無隱私可言,所以本篇要介紹使用者發出請求的手段之二,form POST。

本文同步放置於此

iris的form POST

本篇介紹iris的 form POST,當然要先由什麼是form POST講起,再來才帶到關於iris的form POST怎麼處理,所以我們先由介紹form POST開始。

什麼是form POST

有興趣的讀者們可以先看看POST Http Wiki,這裡可以分成兩部分來說明,第一個是POST方法,另一個是form POST,這篇主要是說明form POST,所以我們針對form POST來說明,簡單說明這主題就是提交一個表單,所以接下來我們針對iris如何處理form POST

處理 iris的form POST

這裡我們使用docs-iris-go的例子來說明,請大家看看以下內容,首先是html的部分。

<form action="/" method="POST">
    <p>Check one or more colors</p>

    <label for="red">Red</label>
    <!-- name can be "colors" too -->
    <input type="checkbox" name="colors[]" value="red" id="red">
    <label for="green">Green</label>
    <input type="checkbox" name="colors[]" value="green" id="green">
    <label for="blue">Blue</label>
    <input type="checkbox" name="colors[]" value="blue" id="blue">
    <input type="submit">
</form>

上面是一個簡單的html的表單,當按下submit後送出表單,接下來看看下列例子來學習如何處理form POST

package main

import "github.com/kataras/iris/v12"

func main() {
    app := iris.New()
    app.RegisterView(iris.HTML("./templates", ".html"))

    app.Get("/", showForm)
    app.Post("/", handleForm)

    app.Listen(":8080")
}

func showForm(ctx iris.Context) {
    ctx.View("form.html")
}

type formExample struct {
    Colors []string `form:"colors[]"` // or just "colors".
}

func handleForm(ctx iris.Context) {
    var form formExample
    err := ctx.ReadForm(&form)
    if err != nil {
        ctx.StopWithError(iris.StatusBadRequest, err)
        return
    }

    ctx.JSON(iris.Map{"Colors": form.Colors})
}

中這個例子做了兩件事,其中之一是之前提過的綁定view,這裡綁定的內容就是前面的html的例子,另外一件事就是當收到使用者提交的表單要如何處理。

這裡的處理方式就是定義一個model然後呼叫ReadForm的方法來將提交的表單綁定成我們指定的model,如此我們就可以針對model來操作。

結論

本篇文章介紹了如何在iris內使用model binding的方式來處理form POST,除了表單外form POST還可以傳遞檔案,待下一篇再跟大家介紹該如何處理。


上一篇
iris的 query string
下一篇
iris 的 file upload
系列文
Iris這個在go語言上地表最快的網頁框架30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言